package com.atguigu.chaptar4

import java.io.{FileInputStream, FileOutputStream, ObjectInputStream, ObjectOutputStream}

object $01_TraitSelf {
  //1.使继承的类有这样的特质:可以从文件读取对象,也写入该对象至文件
  trait A{
    this:Serializable=> //0.如果定义特质时一开始就提醒要继承特质的类你还得继承其他特质就好了,不会出现第7步的问题
    //2.读取对象
    def readFromFile()={
      val ois = new ObjectInputStream(new FileInputStream("d://obj.txt"))
      val obj1 = ois.readObject()
      ois.close()
      obj1
    }
    //3.写入对象
    def writeToFile():Unit={
      val oos = new ObjectOutputStream(new FileOutputStream("d://obj.txt"))
      oos.writeObject(this)//this表示调用该方法的对象
      oos.close()
    }
  }
  //5.创建类使类继承该特性
  class Person extends A with Serializable {//8.继承serializable
    var name:String = _
    var age:Int = _
  }
  //6.在main方法中进行该类实例对象的写入文件和读取操作
  def main(args: Array[String]): Unit = {
    val person = new Person
    person.name="wzx"
    person.age=18
    person.writeToFile()//7.发现没有实现serializable,再次继承serializable
    val person1 = new Person//8.创建新的对象读取刚刚写入的对象
    val p = person1.readFromFile()
    val p2 = p.asInstanceOf[Person]//9.想获取写入对象的属性,只能进行强转
    println(p2.age)
  }




}
